#!/bin/bash

# 快速部署脚本 - 适用于宝塔面板环境
# 使用方法: ./quick-deploy.sh

set -e

echo "🚀 Yuheng Admin 快速部署脚本"
echo "================================"

# 检查是否为root用户
if [ "$EUID" -ne 0 ]; then
    echo "❌ 请使用 root 用户运行此脚本"
    exit 1
fi

# 检查宝塔面板是否安装
if [ ! -f "/etc/init.d/bt" ]; then
    echo "❌ 未检测到宝塔面板，请先安装宝塔面板"
    echo "安装命令: wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh"
    exit 1
fi

echo "✅ 检测到宝塔面板"

# 1. 安装必要软件
echo "📦 安装必要软件..."

# 安装 Node.js
if ! command -v node &> /dev/null; then
    echo "安装 Node.js..."
    curl -fsSL https://rpm.nodesource.com/setup_18.x | bash -
    yum install -y nodejs
else
    echo "✅ Node.js 已安装: $(node --version)"
fi

# 安装 PM2
if ! command -v pm2 &> /dev/null; then
    echo "安装 PM2..."
    npm install -g pm2
else
    echo "✅ PM2 已安装: $(pm2 --version)"
fi

# 2. 创建项目目录
PROJECT_DIR="/www/wwwroot/yuheng-admin"
echo "📁 创建项目目录: $PROJECT_DIR"
mkdir -p $PROJECT_DIR
cd $PROJECT_DIR

# 3. 下载项目文件 (如果不存在)
if [ ! -f "package.json" ]; then
    echo "📥 下载项目文件..."
    # 这里可以替换为实际的下载地址
    echo "请手动上传项目文件到 $PROJECT_DIR 目录"
    echo "或者使用 git clone 命令下载项目"
    read -p "按回车键继续..."
fi

# 4. 配置环境变量
echo "⚙️ 配置环境变量..."
if [ ! -f "config.prod.env" ]; then
    cat > config.prod.env << EOF
# 生产环境配置
DB_HOST=localhost
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=your_mysql_password
DB_DATABASE=Yuheng-Admin

# JWT配置
JWT_SECRET=your-production-secret-key-here-make-it-very-long-and-random
JWT_EXPIRES_IN=24h

# 应用配置
PORT=3000
NODE_ENV=production
EOF
    echo "⚠️ 请编辑 config.prod.env 文件，设置正确的数据库密码和JWT密钥"
    read -p "按回车键继续..."
fi

# 5. 安装依赖
echo "📦 安装项目依赖..."
npm install --production

# 6. 构建项目
echo "🔨 构建项目..."
npm run build

# 7. 创建必要目录
echo "📁 创建必要目录..."
mkdir -p logs
mkdir -p uploads

# 8. 设置权限
echo "🔐 设置文件权限..."
chown -R www:www $PROJECT_DIR
chmod +x dist/main.js

# 9. 启动应用
echo "🌟 启动应用..."
pm2 start ecosystem.config.js --env production
pm2 save
pm2 startup

# 10. 创建 Nginx 配置
echo "🌐 创建 Nginx 配置..."
NGINX_CONF="/www/server/panel/vhost/nginx/yuheng-admin.conf"
cat > $NGINX_CONF << EOF
server {
    listen 80;
    server_name your-domain.com;  # 请替换为实际域名
    
    root $PROJECT_DIR;
    index index.html index.htm;
    
    # API 反向代理
    location /api {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
        proxy_connect_timeout 30s;
        proxy_send_timeout 30s;
        proxy_read_timeout 30s;
    }
    
    # Swagger 文档
    location /api-docs {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
    }
    
    # 静态文件
    location / {
        try_files \$uri \$uri/ /index.html;
    }
    
    # 日志
    access_log /www/wwwlogs/yuheng-admin.access.log;
    error_log /www/wwwlogs/yuheng-admin.error.log;
}
EOF

echo "⚠️ 请编辑 Nginx 配置文件: $NGINX_CONF"
echo "将 server_name 替换为实际域名"

# 11. 重启 Nginx
echo "🔄 重启 Nginx..."
nginx -t && systemctl reload nginx

# 12. 显示部署结果
echo ""
echo "🎉 部署完成！"
echo "================================"
echo "📊 应用状态: pm2 status"
echo "📝 查看日志: pm2 logs yuheng-admin"
echo "🌐 应用地址: http://your-domain.com"
echo "📚 API文档: http://your-domain.com/api-docs"
echo "🔧 管理面板: http://your-server-ip:8888"
echo ""
echo "📋 后续操作:"
echo "1. 编辑 config.prod.env 设置数据库密码"
echo "2. 编辑 Nginx 配置设置域名"
echo "3. 导入数据库结构 (database.sql, menu.sql)"
echo "4. 配置 SSL 证书 (推荐)"
echo "5. 设置防火墙规则"
echo ""
echo "🚨 安全提醒:"
echo "- 修改默认密码"
echo "- 配置防火墙"
echo "- 定期备份数据"
echo "- 监控系统性能"
